package pe.edu.sistemas.postgrado.samupg.view.controller;

import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import pe.edu.sistemas.postgrado.samupg.business.service.marketing.PeriodoService;
import pe.edu.sistemas.postgrado.samupg.domain.model.Periodo;

/**
 *
 * @author Manolo
 */
@ManagedBean
@Scope("view")
@Controller
public class GestionarPeriodosAdmisionController {

    @Resource
    PeriodoService periodoService;
//    private Periodo periodo;
    private Integer periodoId;
    private String nombre;
    private Date fechaApertura;
    Periodo periodo;
    private List<Periodo> listPeriodos;
    private Periodo periodoSeleccionado;
    private Periodo periodoNuevo;
    private boolean periodoActual;

    public GestionarPeriodosAdmisionController() {
        limpiarPeriodoNuevo();
    }

    @PostConstruct
    public void init() {
        listPeriodos = periodoService.listarPeriodos();
    }

    public void cambiarEstadoListener(Periodo per) {
        periodoSeleccionado = periodoService.getPeriodosxId(per.getPeriodoId());
        periodoSeleccionado.setPeriodoActual(false);
        periodoSeleccionado.setFechaCierre(new Date());

        periodoService.actualizarPeriodo(periodoSeleccionado);

        listPeriodos = periodoService.listarPeriodos();

        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Se cerró el período con éxito"));
    }

    public void guardarPeriodoListener() {
        periodoNuevo.setPeriodoActual(periodoActual);

        if (periodoActual) {
            periodoService.guardarPeriodoActual(periodoNuevo);

        } else {
            periodoService.guardar(periodoNuevo);
        }

        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Se ingresó correctamente el nuevo período"));

        limpiarPeriodoNuevo();

        listPeriodos = periodoService.listarPeriodos();
    }

    private void limpiarPeriodoNuevo() {
        periodoNuevo = new Periodo();
        periodoNuevo.setFechaApertura(new Date());
    }

    public List<Periodo> getPeriodoAdmisionActual() {

        List<Periodo> list = periodoService.listarPeriodos();

        if (list.size() > 0) {
            periodo = (Periodo) list.get(0);
            periodoId = periodo.getPeriodoId();
        } else {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Error",
                    "No existe aperturado un Período. Por favor aperture un nuevo período: "));
        }

        return list;
//        return periodoService.getPeriodoActual();
    }

    public String cambiarEstadoPeriodo() {
        periodoService.cambiarEstado(false, this.periodoId);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Success", "Período correctamente cerrado"));
        return "CerrarPeriodoExito.jsf";
    }
//    public void getPeriodoActual()
//    {
//        this.periodo = periodoService.getPeriodoActual();
//        this.nombre = periodo.getNombre();
//        this.fechaApertura = periodo.getFechaApertura();
//    }

    public void setPeriodoId(Integer periodoId) {

        this.periodoId = periodoId;
    }

    public Integer getPeriodoId() {

        return this.periodoId;
    }

    public void setNombre(String nombre) {

        this.nombre = nombre;
    }

    public String getNombre() {

        return this.nombre;
    }

    public void setFechaApertura(Date fechaApertura) {

        this.fechaApertura = fechaApertura;
    }

    public Date getFechaApertura() {
//        return this.fechaApertura.toString();
        return this.fechaApertura;
    }

    public String getStringFechaApertura() {
        return this.fechaApertura.toString();
//        return this.fechaApertura;
    }

    public List<Periodo> getPeriodoAdmisionActualOrig() {
        List<Periodo> list = null;

        list = periodoService.getPeriodoActualOrig();

        if (list.size() > 0) {

            periodoId = list.get(0).getPeriodoId();
            return list;

        } else {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Error",
                    "No existe aperturado un Período. Por favor aperture un nuevo período: "));
            return null;
        }


//        return periodoService.getPeriodoActual();

    }

    public List<Periodo> getListPeriodos() {
        return listPeriodos;
    }

    public void setListPeriodos(List<Periodo> listPeriodos) {
        this.listPeriodos = listPeriodos;
    }

    public Periodo getPeriodoSeleccionado() {
        return periodoSeleccionado;
    }

    public void setPeriodoSeleccionado(Periodo periodoSeleccionado) {
        this.periodoSeleccionado = periodoSeleccionado;
    }

    public Periodo getPeriodoNuevo() {
        return periodoNuevo;
    }

    public void setPeriodoNuevo(Periodo periodoNuevo) {
        this.periodoNuevo = periodoNuevo;
    }

    public boolean isPeriodoActual() {
        return periodoActual;
    }

    public void setPeriodoActual(boolean periodoActual) {
        this.periodoActual = periodoActual;
    }
}